package com.dxf.chepter03

/**
 *
 * 1函数的三种写法 说明
 * def xxx(a:Int):Unit ={
 * }
 *
 * def xxx(a:Int){
 * }
 * def xxx(a:Int) ={
 * *    }
 *
 *
 *
 * ========================================
 *
 * 2函数中可以在嵌套任意语法
 *
 * ==========================
 *
 * 3 函数的默认值,多个参数从左到右覆盖
 * 如果多个参数,指定修改某个参数,用带名参数
 *
 * ===================================
 *
 * 4 递归不能使用类型推断,必须指定返回值 -- 编译器没那么强大
 *
 * ===========================================
 *
 * 5 可变参数 用*表示,只能写在后面
 * 支持0-多个
 * def sum (arg:Int*) :Int ={}
 *
 * 支持1-多个,
 * def sum2(arg:Int,args:Int*):Int={}
 *
 */
object T36_函数细节 {
  def main(args: Array[String]): Unit = {
    /**
     * 2
     */
    def f1(): Unit = { // 和getSum1一样,不过是 private final 私有的方法, 名字为 f1$1
      println("f1")

      def f1(): Unit = {
        println("f1 f1") // 和f1地位一样,会被编译为 f1$2
      }
    }


    /**
     * 3
     *
     */


  }

  //写明返回值的,return可以省略
  def getSum1(n1: Int, n2: Int): Int = {
    return n1 + n2
  }

  //写明返回值的,return可以省略
  def getSum2(n1: Int, n2: Int): Int = {
    n1 + n2
  }

  //自行推断返回值的,不能写return
  def getSum3(n1: Int, n2: Int) = {
    //  return n1+n2
    n1 + n2
  }

  //无返回值的另一种写法,return无效,写不写都可以,返回 unit ()
  def getSum4(n1: Int, n2: Int) {

    return n1 + n2
  }


  def g1(a: String = "v1", b: String): Unit = {

  }
  //args : Int*   可变形参,只能再最后
  def sum(n1: Int, args: Int*): Int = {
    println(args.length)
    var sum = n1
    for (item <- args) {
      sum += item
    }
    sum
  }


}
